#ifndef CANDIDATE_H
#define CANDIDATE_H

#include "pinyinhandler.h"
#include "dicthandler.h"

#include <QObject>
#include <QVector>
#include <QString>
#include <QMap>

class IUserDict;
class UserDict;

class Candidate : public QObject
{
    Q_OBJECT

public:
	explicit Candidate(QObject *parent = nullptr);
	~Candidate() = default;

	// funcs
	void getCandidatesForPinyin(const QString& pinyin);								// 根据拼音获取候选词
	void getCandidatesWithContext(const QString& pinyin, const QString& context);	// 根据上下文获取候选词（更智能的推荐）
	QVector<PinyinCandidate> currentCandidates() const;								// 获取当前候选词列表
	void adjustCandidateOrder(const QString& selectedText);							// 调整候选词排序（基于用户选择历史）
	void clear();																	// 清除当前候选词
	void setCandidateCount(int count);												// 设置候选词数量

signals:
    void candidatesReady(const QVector<PinyinCandidate>& candidates);	 // 候选词生成完成

private:
	// 合并系统词库和用户词库的候选词
    QVector<PinyinCandidate> mergeCandidates(const QVector<PinyinCandidate>& systemCandidates, const QVector<PinyinCandidate>& userCandidates);
	// 优先级排序
	void sortCandidates(QVector<PinyinCandidate>& candidates);

private:
	// 组件变量
	DictHandler* m_dictHandler;          // 词库处理器
    QVector<PinyinCandidate> m_candidates; // 当前候选词列表
    int m_candidateCount;                // 候选词数量		将被配置信号实时更新
    QMap<QString, int> m_selectionHistory; // 用户选择历史（用于调整排序）  

};


#endif // CANDIDATE_H